package com.cheng.example.book.advise151.chap2;


import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 建议25：不要让四舍五入亏了一方
 *
 * 四舍五入规则，加0.5向下取整
 */
public class Client25 {
//    public static void main(String[] args) {
//        System.out.println("10.5近似值: "+Math.round(10.5));
//        System.out.println("-10.5近似值: "+Math.round(-10.6));
//    }


    /**
     * ROUND_UP：原理零方向舍入。向远离0的方向舍入，也就是说，向绝对值最大的方向舍入，只要舍弃位非0即进位。
     * ROUND_DOWN：趋向0方向舍入。向0方向靠拢，也就是说，向绝对值最小的方向输入，注意：所有的位都舍弃，不存在进位情况。
     *
     *
     * ROUND_CEILING：向正无穷方向舍入。向正最大方向靠拢，如果是正数，舍入行为类似于ROUND_UP；如果为负数，则舍入行为类似于ROUND_DOWN.注意：Math.round方法使用的即为此模式。CEILING ceiling天花板的意思,舍入为最大方向
     * ROUND_FLOOR：向负无穷方向舍入。向负无穷方向靠拢，如果是正数，则舍入行为类似ROUND_DOWN，如果是负数，舍入行为类似以ROUND_UP。
     *
     * HALF_UP：最近数字舍入(5舍)，这就是我们经典的四舍五入。
     * HALF_DOWN：最近数字舍入(5舍)。在四舍五入中，5是进位的，在HALF_DOWN中却是舍弃不进位。
     * HALF_EVEN：银行家算法
     * @param args
     */


    /**
     * 舍去位的数值小于5时，直接舍去；
     * 舍去位的数值大于等于6时，进位后舍去；
     * 当舍去位的数值等于5时，分两种情况：5后面还有其它数字(非0)，则进位后舍去；若5后面是0(即5是最后一个数字)，则根据5前一位数的奇偶性来判断是否需要进位，奇数进位，偶数舍去。
     * 感觉银行家算法，绝对公平啊
     * @param args
     */
    public static void main(String[] args) {
        count();
        // 存款
        BigDecimal d = new BigDecimal(888888);
        // 月利率，乘3计算季利率
        BigDecimal r = new BigDecimal(0.001875*3);
        //
        //multiply乘法、division除法、addition加法、Scale范围，级别
        BigDecimal i =d.multiply(r).setScale(2, RoundingMode.HALF_EVEN);
        System.out.println("季利息是："+i);

    }


    /**
     * 计算加减乘除
     */
    public static void count() {
        BigDecimal n1 = new BigDecimal(6);
        BigDecimal n2 = new BigDecimal(2);

        //除法，divide分开，分散的意思
        System.out.println(n1.divide(n2));
        //加法
        System.out.println(n1.add(n2));
        //乘法，multiply乘以的意思
        System.out.println(n1.multiply(n2));
        //减法，subtract减去的意思
        System.out.println(n1.subtract(n2));
    }
}